﻿using Didsoft.DUA.AccesoDatos.Entidades;
using Didsoft.DUA.Negocios;
using Didsoft.DUA.Negocios.Servicios;
using SIOGDE.Negocios.Global;
using SIOGDE.Negocios.Servicios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace SIOGDE.Web.Controllers
{
    public class LoginController : Controller
    {
        private IDUA_UsuarioNegociosServicio servicio = new DUA_UsuarioNegocios();
        //private BOAPersonalNegocios boaPersonalNegocios = new BOAPersonalNegocios();

        //
        // GET: /Login/

        public ActionResult Index()
        {
            if (Didsoft.Mvc.Security.SessionContext<DTOUsuario>.SessionKey != null)
                return RedirectToAction("Index", "Menu");

            return View();
        }

        [HttpPost]
        public ActionResult Index(Didsoft.DUA.AccesoDatos.Entidades.Lites.LoginModel model)
        {
            if (ModelState.IsValid)
            {
                DUA_Usuario dua_usuario = servicio.BuscarUsuario(model.Usuario, model.Contrasena);             

                if (dua_usuario != null)
                {
                    if (dua_usuario.Bloqueado)
                    {
                        ModelState.AddModelError("", "Su cuenta esta bloqueada");
                        return View();
                    }

                    FormsAuthentication.SetAuthCookie(model.Usuario, false);
                    //Initialize session
                    DTOUsuario objSession = new DTOUsuario();
                    objSession.Contrasena = dua_usuario.Contrasena;
                    objSession.Nombre = dua_usuario.Nombre;
                    objSession.Bloqueado = dua_usuario.Bloqueado;
                    objSession.Rol = dua_usuario.Rol;
                    objSession.Id = dua_usuario.Id;
                    objSession.Persona = new AccesoDatos.Entidades.Persona() { Id = dua_usuario.Persona.Id };
                    objSession.Persona = BusinessFactory.Current.GetPersonaNegocios().ObtenerPorId(dua_usuario.Persona.Id);

                    var Gestion = (BusinessFactory.Current.GetGestionNegocios().GetGestionActiva());
                    objSession.DestinoActual = BusinessFactory.Current.GetDestinoAsignadoNegocios().GetDestinoActual(Gestion.Id,
                                                                                                                     dua_usuario.Persona.Id);
                    Didsoft.Mvc.Security.SessionContext<DTOUsuario>.LoadSessionParams(objSession);
                    Didsoft.Mvc.Security.SessionContext<DTOUsuario>.SetPeriodTag(Gestion);
                    
                    return RedirectToAction("Index", "Menu");
                }
                else
                {
                    ModelState.AddModelError("", "Usuario o clave no existe");
                }
            }
            return View();
        }

        public ActionResult CerrarSession()
        {
            Didsoft.Mvc.Security.SessionContext<DTOUsuario>.CloseSession();
            //return RedirectToAction("Index", "Login");
            var data = Didsoft.Mvc.Security.Config.SessionConfigSection.GetSection();
            return Redirect(data.DeploymentUrl);
        }




    }
}
